WindowsPCでWSL2を有効化してCDKとTerraformを使えるようにしてみた
こんにちは、soraです。
今回は、WindowsPCでWSL2を有効化してCDKとTerraformが使えるようにしてみたことについて書いていきます。
想定より少し面倒だったので、どなたかの参考になれば幸いです。
WSL2有効化+Ubuntuインストール
Linux上で操作したほうが勝手が良いため、WSL2を有効化してUbuntuをインストールします。
インストール方法などは、以下のページにわかりやすくまとめられています。
以降はインストールしたUbuntu上でコマンドを実行していきます。
tfenvのインストール
Terraformをインストールします。
Terraformを使わない方は、スキップしていただいても問題ありません。
# Terraformのバージョン管理ツール「tfenv」のインストール $ sudo apt update && sudo apt upgrade $ git clone https://github.com/tfutils/tfenv.git ~/.tfenv $ echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile $ source ~/.bash_profile # tfenvのバージョン確認 $ tfenv --version tfenv 3.0.0-18-g1ccfddb # インストール可能なTerraformのバージョン確認 $ tfenv list-remote 1.4.0-beta1 1.4.0-alpha20221207 1.4.0-alpha20221109 1.3.8 …… 0.1.0 # Terraformのインストール $ tfenv install 1.3.8 # ※zipが入っていなくてエラーになったため、zipのインストール $ sudo apt-get install zip # 改めてTerraformのインストール $ tfenv install 1.3.8 # 使用するTerraformのバージョンを指定 $ tfenv use 1.3.8
AWS CLIのインストール
AWS CDKを使うために必要なAWS CLIをインストールします。
# AWS CLIのインストール $ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" $ unzip awscliv2.zip $ sudo ./aws/install # AWS CLIのバージョン確認 $ aws --version aws-cli/2.9.23 Python/3.9.11 Linux/5.10.16.3-microsoft-standard-WSL2 exe/x86_64.ubuntu.22 prompt/off
Node.jsのインストール
AWS CDKを使うために必要なNode.jsをインストールします。
普通にaptでインストールすると、Node.jsのバージョンが古かったり、nodeコマンドでなくnodejsコマンドで登録されたりするらしいため、以下の参考ページに従ってNode.jsのバージョン管理ツール「n」を使ってインストールします。
参考:Ubuntuに最新のNode.jsを難なくインストールする
# Node.jsとnpmのインストール $ sudo apt install -y nodejs npm # Node.jsのバージョン管理ツール「n」のインストール $ sudo npm install n -g # バージョン管理ツール「n」を使って、nodeをインストール $ sudo n stable # 最初にインストールした古いnodejsとnpmの削除 $ sudo apt purge -y nodejs npm # Node.jsのバージョン確認 $ node -v v18.14.0
AWS CDKのインストール
いよいよAWS CDKをインストールします。
# AWS CDKのインストール $ sudo npm install -g aws-cdk # AWS CDKのバージョン確認 $ cdk --version 2.64.0 (build fb67c77)
AWS CDKの実行
AWS CDKを使うための準備が整ったため実行します。
AWSの認証情報について、aws configureで設定するとアクセスキーとシークレットアクセスキーが~\.aws\credentials
に平文で保存されます。これを避けるための暗号化については後述します。
またMFAを有効化している場合は、configファイルの修正が必要です。そちらも後述します。
# AWS認証情報の入力 $ aws configure # CDK init $ mkdir python-test $ cd python-test # 使用する言語に応じて、pythonの部分は書き換えてください。 $ cdk init app --language python # Pythonを使う方向け ## 仮想環境を使うためにvenvのインストール $ sudo sudo apt install python3-venv ## (参考)仮想環境を新しく作成してスイッチする場合 $ python3 -m venv <仮想環境名> $ source <仮想環境名>/bin/activate ## 仮想環境へのスイッチ $ source .env/bin/activate ## 必要なモジュールのインストール (.env) $ pip install -r requirements.txt # (参考)仮想環境を抜けるコマンド (.env) $ deactivate # CDKの実行 (.env) $ cdk synth (.env) $ cdk bootstrap (.env) $ cdk init (.env) $ cdk diff (.env) $ cdk deploy
(スイッチロールする方やMFA有効化している方向け)アクセスするプロファイルの指定
スイッチロールする場合やMFA有効化している場合は、AWSのconfigファイルにプロファイルを追記する必要があります。
configファイルは、これまで工程通りに進めていれば\\wsl.localhost\Ubuntu\home\"Ubuntuユーザ名"\.aws
にあると思います。
以下に記載するconfigファイルは、MFA有効化したユーザA(default)からスイッチ先のIAMロール(profile )にスイッチロールする場合のものです。
参考:【小ネタ】AWS CLIでスイッチロールして作業を行うための設定をやってみた
config
[default] region=ap-northeast-1 output=json [profile <プロファイル名>] region=ap-northeast-1 mfa_serial=<スイッチ元のIAMユーザのMFA識別子(ARN)> role_arn=<スイッチ先のIAMロールのARN> source_profile=default
コマンド実行時のデフォルトのプロファイルを変更します。
ターミナルを立ち上げるたびに設定するのが面倒な方は、~/.bash_profile
に環境変数を書いてください。
$ export AWS_DEFAULT_PROFILE=<プロファイル名> # 設定ファイルに書き込む場合 $ echo 'export AWS_DEFAULT_PROFILE=<プロファイル名>' >> ~/.bash_profile $ source ~/.bash_profile
(TerraformでMFA有効化のユーザを使う方)鍵の暗号化
MFA有効化しているユーザを使用する場合、ここまでの設定だけではTerraformが使えません。
MFA有効化に対応するために必要な、AWSの認証情報をセキュアに保管するaws-vaultなどをインストールします。
ここでも環境変数を設定するため、ターミナルを立ち上げるたびに設定するのが面倒な方は、~/.bash_profile
に環境変数を書いてください。
参考:aws-vaultをLinux環境でも使う方法【セキュリティ向上】
# aws-vaultのインストール(バージョン部分は必要に応じて修正してください。) $ curl -L https://github.com/99designs/aws-vault/releases/download/v6.6.2/aws-vault-linux-amd64 -o /usr/local/bin/aws-vault $ chmod 755 /usr/local/bin/aws-vault # aws-vaultのバージョン確認 $ aws-vault --version v6.6.2 # 暗号化のためのpassとgnupgのインストール $ sudo apt-get update && sudo apt-get install -y pass gnupg # 鍵の生成 $ gpg --gen-key # 鍵が生成されていることの確認 $ gpg --list-keys ----------------------------- pub rsa3072 2023-02-14 [SC] [expires: 2025-02-13] <キーID> uid [ultimate] <鍵の生成時に入力した名前> <鍵の生成時に入力したメールアドレス> sub rsa3072 2023-02-14 [E] [expires: 2025-02-13] # passのセットアップ(キーIDは鍵が生成されていることの確認で表示されたもの) $ pass init <キーID> # 環境変数の設定(一時的な認証情報の有効期限など) $ export AWS_VAULT_BACKEND=pass $ export AWS_VAULT_PASS_PREFIX=aws-vault $ export AWS_SESSION_TOKEN_TTL=3h # クレデンシャルの登録(アクセスキーとシークレットアクセスキーの登録) $ aws-vault add default # 設定後の確認 $ aws-vault list # aws-vaultで設定した鍵を使用して、コマンドを実行 $ aws-vault exec <プロファイル名> -- <コマンド> # aws-vault execを実行してエラーになる場合、環境変数GPG_TTYを操作中のターミナルに設定する $ export GPG_TTY=$(tty)
最後に
今回は、「WindowsPCでWSL2を有効化してCDKとTerraformが使えるようにしてみた」について紹介しました。
興味がある方はぜひお試しください。